Improve pygrub error reporting when opening ext2 fs is not possible
authormip@xencore04.1virtual.net <mip@xencore04.1virtual.net>
Mon, 3 Apr 2006 17:28:54 +0000 (18:28 +0100)
committermip@xencore04.1virtual.net <mip@xencore04.1virtual.net>
Mon, 3 Apr 2006 17:28:54 +0000 (18:28 +0100)
As reported in the thread:
http://lists.xensource.com/archives/html/xen-users/2006-03/msg00721.html,
pygrub does not open ext2 file systems in partitioned images or sub
partitions on e.g. CentOS/RHEL 4, because e2fsprogs ext2fs_open does not
support an offset into the file to be opened.

With this patch, the error is correctly reported instead of a generic
"unable to open file" (and leaving the user searching in the dark).

Signed-off-by: Michael Paesold <mpaesold@gmx.at>
tools/pygrub/src/fsys/ext2/ext2module.c

index decf1ad65259dc688b524f58a09501e359cac14c..63d20f298384d02063aa4a6f5001c5f4fb215bc2 100644 (file)
@@ -213,7 +213,9 @@ ext2_fs_open (Ext2Fs *fs, PyObject *args, PyObject *kwargs)
     int flags = 0, superblock = 0, offset = 0, err;
     unsigned int block_size = 0;
     ext2_filsys efs;
+#ifdef HAVE_EXT2FS_OPEN2
     char offsetopt[30];
+#endif
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|iiii", kwlist, 
                                      &name, &flags, &superblock, 
@@ -225,19 +227,24 @@ ext2_fs_open (Ext2Fs *fs, PyObject *args, PyObject *kwargs)
         return NULL;
     }
 
+#ifdef HAVE_EXT2FS_OPEN2
     if (offset != 0) {
         snprintf(offsetopt, 29, "offset=%d", offset);
     }
 
-#ifdef HAVE_EXT2FS_OPEN2
     err = ext2fs_open2(name, offsetopt, flags, superblock, block_size, 
                        unix_io_manager, &efs);
 #else
+    if (offset != 0) {
+        PyErr_SetString(PyExc_ValueError, "offset argument not supported");
+        return NULL;
+    }
+
     err = ext2fs_open(name, flags, superblock, block_size,
                       unix_io_manager, &efs);
 #endif
     if (err) {
-        PyErr_SetString(PyExc_ValueError, "unable to open file");
+        PyErr_SetString(PyExc_ValueError, "unable to open filesystem");
         return NULL;
     }